package proto

import (
	"regexp"
	"sort"
	D "websocket_apn/define"
	"websocket_apn/log"
)

/*
71 AB 00 00 03 5D 00 00 01 9A 00 00 02 D4 07 01 81 E2 08 00
                       1 ID                                                                    2 名字                                                      3 妖力
12 49 	 0A 42 	  08 F3 FF FF FF FF FF FF FF FF 01 	10 D5 C9 08 					 1A 0F E6 B6 82 E5 B9 BF E5 BA 86 E5 A4 A9 E5 B0 8A 20 0A 	 2A 06 31 30 33 31 38 31 				38 D5 C9 08 40 A9 E6 BD 01 4A 00
5A 00 60 00 68 00 70 00 80 01 00 10 E8 07 18 00
12 E8 01 0A E2 01 08 F7 E8 A7 B0 C0 5A 				10 FF FF FF FF FF FF FF FF FF 01 1A 0F E5 A2 A8 E9 9B A8 E3 80 81 E6 98 8E E7 BB B4 20 D3 04 2A 0B 31 33 31 38 33 30 36 34 35 39 38 38 F8 E5 08 40 99 E6 BD 01 4A 98 01 68 74 74 70 73 3A 2F 2F 74 68 69 72 64 77 78 2E 71 6C 6F 67 6F 2E 63 6E 2F 6D 6D 6F 70 65 6E 2F 76 69 5F 33 32 2F 62 42 73 51 4A 63 6F 64 69 62 72 42 4E 34 56 64 33 38 70 52 55 73 49 48 35 41 7A 35 6A 52 31 37 4F 75 43 71 66 6A 58 57 62 65 4F 44 35 68 58 7A 33 6A 35 42 56 44 77 71 35 50 59 7A 47 64 54 43 32 71 44 6B 6C 6D 78 62 67 78 50 34 74 50 76 69 61 56 76 61 75 53 78 46 6F 33 51 79 30 47 6A 4E 55 48 6C 70 6F 47 37 69 63 39 77 6D 76 77 2F 31 33 32
50 00 60 D6 F4 08 70 00 78 95 4E 10 B7 10
12 47 	 0A 42 	  08 D7 B8 BC AB C0 5A 				10 95 8C 09 					 1A 0F E6 98 9F E4 BA 91 E2 98 80 E6 B8 85 E9 A3 8E 20 A7 07 2A 0B 34 34 35 38 33 38 37 35 34 31 34 38 B7 E5 08 40 8F E6 BD 01 4A 00
50 00 60 D6 F4 08 70 00 78 93 4E 10 CB 11
12 F2 01 0A EC 01 08 D1 BD C6 BB C0 5A 				10 C6 E5 08 					 1A 0F E7 84 A1 E9 9B 99 E2 9C A8 E5 A6 82 E6 AD 8C 20 A7 07 2A 0B 34 38 38 36 39 32 31 36 39 38 34 38 F8 E5 08 40 B1 E6 BD 01 4A A7 01 68 74 74 70 73 3A 2F 2F 74 68 69 72 64 77 78 2E 71 6C 6F 67 6F 2E 63 6E 2F 6D 6D 6F 70 65 6E 2F 76 69 5F 33 32 2F 50 69 61 6A 78 53 71 42 52 61 45 4B 66 5A 5A 49 30 37 74 69 63 6F 64 47 56 66 68 46 46 67 6B 62 31 67 63 55 74 45 70 57 5A 4D 30 6F 46 6D 52 69 63 30 69 63 7A 65 7A 4E 69 61 73 74 36 63 70 7A 45 54 64 58 62 50 54 73 72 79 52 76 59 65 72 65 34 41 74 67 70 63 32 42 6E 52 75 56 75 32 4F 46 69 61 50 70 68 72 41 5A 52 39 6E 4D 52 75 4C 77 5A 69 63 58 58 56 76 6D 74 6A 35 72 51 2F 31 33 32 50 F2 EC 08
      60 8C F5 08 70 00 78 B3 4E 10 98 13
12 D0 01 0A CA 01 08 EF E4 87 B0 C0 5A 				10 A6 E5 08 					 1A 0F E5 A2 A8 E9 9B A8 E3 80 81 E4 B9 9D E5 A4 A9 20 A7 07 2A 0B 35 33 30 38 39 38 36 30 36 32 30 38 F8 E5 08 40 99 E6 BD 01 4A 87 01 68 74 74 70 73 3A 2F 2F 74 68 69 72 64 77 78 2E 71 6C 6F 67 6F 2E 63 6E 2F 6D 6D 6F 70 65 6E 2F 76 69 5F 33 32 2F 32 49 52 49 77 31 4A 53 38 71 39 78 33 4F 73 75 69 62 6D 62 56 51 48 68 33 63 49 79 64 76 69 61 64 62 79 41 44 43 51 43 72 45 74 52 75 6A 4A 64 33 36 56 46 45 69 62 42 30 59 7A 69 61 75 51 4A 43 50 35 7A 68 52 5A 64 70 36 4A 73 69 61 72 57 6E 69 63 69 63 4B 53 4C 5A 47 68 73 77 2F 31 33 32
50 00 60 D6 F4 08 70 00 78 AB 4E 10 9C 14 18 00

*/
// 解析斗法挑战列表
func ParaDouFaInfo(dataBytes []byte) []D.DouFaInfo {
	allInfo := []D.DouFaInfo{}
	data := BytesToHexStr(dataBytes)
	/*
		38 00 10 8F A8 C6 B5 E6 32 18 06 28 00 30 00 38 FA CD 8C 01 40 00 48 64 50 01
		38 00 10 97 E3 C6 B5 E6 32 18 07 28 01 30 00 38 BE CF 8C 01 40 00 48 64 50 01
	*/
	// 																				1 ID                     							2 名字                            					3 妖力														4 积分
	re := regexp.MustCompile(`12(?:[0-9A-F]{2}){1,2}0A(?:[0-9A-F]{2}){1,2}08([0-9A-F]{12})10(?:[0-9A-F]{2}){2,10}1A[0-9A-F]{2}((?:[0-9A-F]{2})+?)20(?:[0-9A-F]{2}){1,2}2A[0-9A-F]{2}((?:3[0-9])+?)38[0-9A-F]{6}40(?:[0-9A-F]{2})+?78[0-9A-F]{4}10([0-9A-F]{4})`)
	res := re.FindAllStringSubmatch(data, -1)
	if len(res) > 0 && len(res) != 5 && len(res[0]) > 0 {
		for idx, regRes := range res {
			info := D.DouFaInfo{
				Idx:         byte(idx + 1),                  //序号
				UserID:      regRes[1],                      //用户ID
				Name:        HexDataStrToStr(regRes[2]),     //用户名字
				CombatValue: HexDataStrToInt64(regRes[3]),   //妖力
				Points:      ParaIntDataByHexStr(regRes[4]), //积分
			}
			allInfo = append(allInfo, info)
		}
		sort.Sort(D.DouFaInfoSort(allInfo))
	} else {
		log.Errorf("解析斗法数据失败-%s", data)
	}

	return allInfo
}
